//给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。 
//
// 返回删除后的链表的头节点。 
//
// 注意：此题对比原题有改动 
//
// 示例 1: 
//
// 输入: head = [4,5,1,9], val = 5
//输出: [4,1,9]
//解释: 给定你链表中值为 5 的第二个节点，那么在调用了你的函数之后，该链表应变为 4 -> 1 -> 9.
// 
//
// 示例 2: 
//
// 输入: head = [4,5,1,9], val = 1
//输出: [4,5,9]
//解释: 给定你链表中值为 1 的第三个节点，那么在调用了你的函数之后，该链表应变为 4 -> 5 -> 9.
// 
//
// 
//
// 说明： 
//
// 
// 题目保证链表中节点的值互不相同 
// 若使用 C 或 C++ 语言，你不需要 free 或 delete 被删除的节点 
// 
//
// Related Topics 链表 👍 313 👎 0


package com.leetcode.editor.cn;

import com.leetcode.editor.cn.common.ListNode;

public class PJianZhiOffer18ShanChuLianBiaoDeJieDianLcof {
    public static void main(String[] args) {
        Solution solution = new PJianZhiOffer18ShanChuLianBiaoDeJieDianLcof().new Solution();
        ListNode n4 = new ListNode(4);
        ListNode n5 = new ListNode(5);
        ListNode n1 = new ListNode(1);
        ListNode n9 = new ListNode(9);
        n4.next = n5;
        n5.next = n1;
        n1.next = n9;
        solution.deleteNode(n4, 5);
    }
    //leetcode submit region begin(Prohibit modification and deletion)

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     * int val;
     * ListNode next;
     * ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode deleteNode(ListNode head, int val) {
            ListNode emptyNode = new ListNode(-1);
            emptyNode.next = head;
            ListNode node = emptyNode;
            while (node.next != null) {
                if (node.next.val == val) {
                    node.next = node.next.next;
                    break;
                }
                node = node.next;
            }
            return emptyNode.next;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}